#!/bin/bash

# 系统初始化配置脚本
# 功能包括：配置交换内存、升级GCC版本、安装常用依赖

# 确保脚本以root权限运行
if [ "$(id -u)" -ne 0 ]; then
    echo "此脚本需要以root权限运行，请使用sudo或切换到root用户" >&2
    exit 1
fi

# 1. 解决内存不足问题 - 配置交换内存
echo "=== 开始配置4GB交换内存 ==="

# 创建4GB交换文件（在/目录下）
dd if=/dev/zero of=/swapfile bs=1M count=4096

# 设置文件权限
chmod 600 /swapfile

# 创建交换分区
mkswap /swapfile

# 启用交换分区
swapon /swapfile

# 设置开机自动挂载
echo '/ swapfile swap swap defaults 0 0' | tee -a /etc/fstab

echo "=== 交换内存配置完成 ==="

# 2. 升级GCC版本（解决C编译器版本不足问题）
echo "=== 开始升级GCC版本 ==="

# 备份原有仓库配置
echo "=== 备份原有仓库配置 ==="
mkdir -p /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/

# 下载阿里云CentOS 7仓库配置
echo "=== 配置阿里云仓库 ==="
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

# 创建第一个SCL仓库配置：CentOS-SCLo-scl.repo
echo "=== 配置SCL仓库1 ==="
cat > /etc/yum.repos.d/CentOS-SCLo-scl.repo << EOF
[centos-sclo-scl]
name=CentOS-7 - SCLo scl
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/
gpgcheck=1
enabled=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-SIG-SCLo
EOF

# 创建第二个SCL仓库配置：CentOS-SCLo-scl-rh.repo
echo "=== 配置SCL仓库2 ==="
cat > /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo << EOF
[centos-sclo-scl-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
gpgcheck=1
enabled=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-SIG-SCLo
EOF

# 重新清理缓存并重建
echo "=== 清理并重建yum缓存 ==="
yum clean all
yum makecache fast

# 手动导入正确的GPG密钥
echo "=== 导入GPG密钥 ==="
curl -o /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo https://www.centos.org/keys/RPM-GPG-KEY-CentOS-SIG-SCLo
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

# 安装高版本GCC
echo "=== 安装高版本GCC ==="
yum install -y centos-release-scl
yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++

# 永久生效GCC配置
echo "=== 配置GCC永久生效 ==="
echo "source /opt/rh/devtoolset-9/enable" >> ~/.bashrc
source ~/.bashrc

# 验证GCC版本
echo "=== 当前GCC版本 ==="
gcc --version

echo "=== GCC版本升级完成 ==="

# 3. 安装常用依赖
echo "=== 安装系统常用依赖 ==="
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel perl-Test-Simple -y

echo "=== 所有系统初始化操作完成 ==="
